/* 
 * [New BSD License (BSD 3-Clause License)]
 * Copyright (c) 2012, Max Bechtold
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 *     - Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     - Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     - Neither the name of the Rel2Xml Project nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package maxbe.rel2xml.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

import org.apache.log4j.Logger;

public final class IO {

	private static Logger log = Logger.getLogger(IO.class);

	private IO() {
		// disallow instantiation of this class
	}

	public static String readFileAsString(String path)
			throws java.io.IOException {
		return readFileAsString(new File(path));
	}

	public static String readFileAsString(File file) throws java.io.IOException {
		byte[] buffer = new byte[(int) file.length()];
		BufferedInputStream f = new BufferedInputStream(new FileInputStream(
				file));
		f.read(buffer);
		return new String(buffer);
	}

	public static void emptyDir(File dir) {
		if (dir.isFile()) {
			dir.delete();
			dir.mkdir();
		} else {
			for (File entry : dir.listFiles()) {
				if (entry.isDirectory()) {
					emptyDir(entry);
				}
				entry.delete();
			}
		}
	}

	public static void copyFile(File source, File destination)
			throws IOException {
		if (source.isDirectory()) {
			throw new IOException(
					"Can't copy directory, use copy(File, File) instead!");
		}
		if (destination.isDirectory()) {
			destination = new File(destination.getAbsolutePath()
					+ File.separator + source.getName());
		}
		FileChannel in = (new FileInputStream(source)).getChannel();
		FileChannel out = (new FileOutputStream(destination)).getChannel();
		in.transferTo(0, source.length(), out);
		in.close();
		out.close();
	}
}
